unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, 
  Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    editNum1: TEdit;
    editOper: TEdit;
    editNum2: TEdit;
    lbResult: TLabel;
    ChkAuto: TCheckBox;
    buttCalc: TButton;

    Label1: TLabel;
    
    procedure buttCalcClick(Sender: TObject);
    procedure EditChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.buttCalcClick(Sender: TObject);
var num1,num2,r:Real;
begin
   try
     num1:=StrToFloat(editNum1.Text);
   except
     num1:=0;
   end;

   try
     num2:=StrToFloat(editNum2.Text);
   except
     num2:=0;
   end;

   r:=0;
   if editOper.Text='+' then r:=num1+num2;
   if editOper.Text='-' then r:=num1-num2;
   if editOper.Text='*' then r:=num1*num2;
   if editOper.Text='/' then r:=num1/num2;

   lbResult.Caption:=FloatToStr(r);
end;

{X ly tnh huong OnChange cua cac o van ban}
procedure TForm1.EditChange(Sender: TObject);
begin
 if not ChkAuto.Checked then exit;

 with (Sender as TEdit) do begin
     text:=trim(text);    

     if (Sender=editNum1) or
        (Sender=editNum2)  then
     try
         StrToFloat(editNum1.Text);
     except
         ShowMessage('invalid number');
     end;

     if (sender=editOper) then
        if not ((text='+') or (text='-') or
                      (text='*') or (text='/')) then
        ShowMessage('Invalid Operator');
 end;
  
  buttCalcClick(sender);
end;

end.
